<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">
<html>

<!--
	Copyright (c) 1999-2008 by Digital Mars
	All Rights Reserved
	Written by Walter Bright
	www.digitalmars.com
  -->

<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" >
<title>std.intrinsic - D Programming Language - Digital Mars</title>
<link rel="stylesheet" type="text/css" href="./style.css">
<link rel="icon" type="image/gif" href="./holy.gif" />
</head>

<body>
<div id="heading">
	<a href="http://www.digitalmars.com/"><img src="./dmlogo.gif" width="270" height="53" border="0" alt="www.digitalmars.com" align="left"></a>
	<p align="right">D Programming Language 1.0</p>


	<div id="headingNav">
	<ul>
	<li><a href="http://www.prowiki.org/wiki4d/wiki.cgi?DocComments/Phobos/StdIntrinsic" title="Read/write comments and feedback">Comments</a></li>
	<li><a href="http://www.digitalmars.com/d/1.0/index.html" title="D Programming Language" class="dlink">D</a></li>
	<li><a href="http://www.digitalmars.com/advancedsearch.html" title="Search Digital Mars web site">Search</a></li>
	<li><a href="http://www.digitalmars.com/" title="www.digitalmars.com">Home</a></li>
	</ul>
	</div>

	<div id="lastupdate">Last update Wed Oct  1 23:47:52 2008</div>
</div>

<!-- -->

<div id="navigation">
    <div class="navblock">
<form method="get" action="http://www.google.com/search">
<div id="searchbox">
<input id="q" name="q" size="10" value="RTL Search" onFocus='if(this.value == "RTL Search"){this.value="";}'>
<input type="hidden" id="domains" name="domains" value="www.digitalmars.com">
<input type="hidden" id="sitesearch" name="sitesearch" value="www.digitalmars.com/d/1.0/phobos">
<input type="hidden" id="sourceid" name="sourceid" value="google-search">
<input type="submit" id="submit" name="submit" value="Go">
</div>
</form>
<div id="toctop">
    <ul>
	<li><a href="http://www.digitalmars.com/d/1.0/index.html" title="D Programming Language">D ...</a></li>
	<li><a href="http://www.digitalmars.com/d/1.0/lex.html" title="D Language Specification">Language ...</a></li>
	<li><a href="phobos.html" title="D Runtime Library">Phobos ...</a></li>
	<li><a href="http://www.digitalmars.com/d/1.0/comparison.html" title="Language Comparisons">Comparisons ...</a></li>
    </ul>
</div>
</div>
    <div class="navblock">
<ul>
<li><a href="index.html" title="Index of all HTML files">Index</a></li>
</ul>
    <ul>
	<li><a href="object.html" title="root of object hierarchy">object</a></li>
    </ul>
    <h2><a href="phobos.html#std" title="D standard modules">std</a></h2>
    <ul>
	<li><a href="std.base64.html" title="Encode/decode base64 format">std.base64</a></li>
	<li><a href="std.bind.html" title="Function argument binding">std.bind</a></li>
	<li><a href="std.bitarray.html" title="Arrays of bits">std.bitarray</a></li>
	<li><a href="std.boxer.html" title="Box/unbox types">std.boxer</a></li>
	<li><a href="std.compiler.html" title="Information about the D compiler implementation">std.compiler</a></li>
	<li><a href="std.conv.html" title="Conversion of strings to integers">std.conv</a></li>
	<li><a href="std.cover.html" title="D coverage analyzer">std.cover</a></li>
	<li><a href="std.cpuid.html" title="CPU identification">std.cpuid</a></li>
	<li><a href="std.ctype.html" title="Simple character classification">std.ctype</a></li>
	<li><a href="std.date.html" title="Date and time functions">std.date</a></li>
	<li><a href="std.demangle.html" title="Demangle D names">std.demangle</a></li>
	<li><a href="std.file.html" title="Basic file operations">std.file</a></li>
	<li><a href="std.format.html" title="Formatted conversions of values to strings">std.format</a></li>
	<li><a href="std.gc.html" title="Control the garbage collector">std.gc</a></li>
	<li><a href="std.intrinsic.html" title="Compiler built in intrinsic functions">std.intrinsic</a></li>
	<li><a href="std.math.html" title="the usual math functions">std.math</a></li>
	<li><a href="std.md5.html" title="Compute MD5 digests">std.md5</a></li>
	<li><a href="std.metastrings.html" title="Metaprogramming with strings">std.metastrings</a></li>
	<li><a href="std.mmfile.html" title="Memory mapped files">std.mmfile</a></li>
	<li><a href="std.openrj.html" title="Basic database">std.openrj</a></li>
	<li><a href="std.outbuffer.html" title="Assemble data into an array of bytes">std.outbuffer</a></li>
	<li><a href="std.outofmemory.html" title="Out of memory exception">std.outofmemory</a></li>
	<li><a href="std.path.html" title="Manipulate file names, path names, etc.">std.path</a></li>
	<li><a href="std.process.html" title="Create/destroy threads">std.process</a></li>
	<li><a href="std.random.html" title="Random number generation">std.random</a></li>
	<li><a href="std.regexp.html" title="regular expressions">std.regexp</a></li>
	<li><a href="std.signals.html" title="Signals">std.signals</a></li>
	<li><a href="std.socket.html" title="Sockets">std.socket</a></li>
	<li><a href="std.socketstream.html" title="Stream for a blocking, connected Socket">std.socketstream</a></li>
	<li><a href="std.stdint.html" title="Integral types for various purposes">std.stdint</a></li>
	<li><a href="std.stdio.html" title="Standard I/O">std.stdio</a></li>
	<li><a href="std.cstream.html" title="Stream I/O">std.cstream</a></li>
	<li><a href="std.stream.html" title="Stream I/O">std.stream</a></li>
	<li><a href="std.string.html" title="Basic string operations">std.string</a></li>
	<li><a href="std.system.html" title="Inquire about the CPU, operating system">std.system</a></li>
	<li><a href="std.thread.html" title="Thread operations">std.thread</a></li>
	<li><a href="std.traits.html" title="Type traits">std.traits</a></li>
	<li><a href="std.typetuple.html" title="Type tuples">std.typetuple</a></li>
	<li><a href="std.uni.html" title="Unicode classification">std.uni</a></li>
	<li><a href="std.uri.html" title="Encode and decode Uniform Resource Identifiers (URIs)">std.uri</a></li>
	<li><a href="std.utf.html" title="Encode and decode utf character encodings">std.utf</a></li>
	<li><a href="std.zip.html" title="Read/write zip archives">std.zip</a></li>
	<li><a href="std.zlib.html" title="Compression / Decompression of data">std.zlib</a></li>
	<li><a href="std.c.fenv.html" title="Floating point environment">std.c.fenv</a></li>
	<li><a href="std.c.locale.html" title="Locale">std.c.locale</a></li>
	<li><a href="std.c.math.html" title="Math">std.c.math</a></li>
	<li><a href="std.c.process.html" title="Process">std.c.process</a></li>
	<li><a href="std.c.stdarg.html" title="Variadic arguments">std.c.stdarg</a></li>
	<li><a href="std.c.stddef.html" title="Standard definitions">std.c.stddef</a></li>
	<li><a href="std.c.stdio.html" title="Standard I/O">std.c.stdio</a></li>
	<li><a href="std.c.stdlib.html" title="Standard library">std.c.stdlib</a></li>
	<li><a href="std.c.string.html" title="Strings">std.c.string</a></li>
	<li><a href="std.c.time.html" title="Time">std.c.time</a></li>
	<li><a href="std.c.wcharh.html" title="Wide characters">std.c.wcharh</a></li>
	<li><a href="std.windows.charset.html" title="Conversion to/from Windows character sets">std.windows.charset</a></li>
	<li><a href="phobos.html#std_windows" title="Modules specific to Windows">std.windows</a></li>
	<li><a href="phobos.html#std_linux" title="Modules specific to Windows">std.linux</a></li>
	<li><a href="phobos.html#std_c_windows" title="C Windows API">std.c.windows</a></li>
	<li><a href="phobos.html#std_c_linux" title="C Linux API">std.c.linux</a></li>
    </ul>
</div>
</div>
<div id="content">
    <h1><a href="./htmlsrc/std.intrinsic.html">std.intrinsic</a></h1>
    
These functions are built-in intrinsics to the compiler.<br><br>
Intrinsic functions are functions built in to the compiler,
	usually to take advantage of specific CPU features that
	are inefficient to handle via external functions.
	The compiler's optimizer and code generator are fully
	integrated in with intrinsic functions, bringing to bear
	their full power on them.
	This can result in some surprising speedups.<br><br> <br><br>
<b>License:</b><br>
Public Domain<br><br>
<b>Authors:</b><br>
Walter Bright<br><br>
<dl>
<dt><big>int <a href="./htmlsrc/std.intrinsic.html#L32" title="At line 32.">bsf</a>(uint <i>v</i>);</big></dt>
<dd>
Scans the bits in v starting with bit 0, looking
 for the first set bit.
 <br><br>
<b>Returns:</b><br>
The bit number of the first bit set.
	The return value is undefined if v is zero.<br><br></dd>
<dt><big>int <a href="./htmlsrc/std.intrinsic.html#L63" title="At line 63.">bsr</a>(uint <i>v</i>);</big></dt>
<dd>
Scans the bits in v from the most significant bit
 to the least significant bit, looking
 for the first set bit.
 <br><br>
<b>Returns:</b><br>
The bit number of the first bit set.
	The return value is undefined if v is zero.<br><br>
<b>Example:</b><br><pre class="d_code">

 <span class="k">import</span> <span class="i">std</span>.<span class="i">stdio</span>;
 <span class="k">import</span> <span class="i">std</span>.<span class="i">intrinsic</span>;

 <span class="k">int</span> <span class="i">main</span>()
 {   
     <span class="k">uint</span> <span class="i">v</span>;
     <span class="k">int</span> <span class="i">x</span>;

     <span class="i">v</span> = <span class="n">0x21</span>;
     <span class="i">x</span> = <span class="i">bsf</span>(<span class="i">v</span>);
     <span class="i">writefln</span>(<span class="sl">"bsf(x%x) = %d"</span>, <span class="i">v</span>, <span class="i">x</span>);
     <span class="i">x</span> = <span class="i">bsr</span>(<span class="i">v</span>);
     <span class="i">writefln</span>(<span class="sl">"bsr(x%x) = %d"</span>, <span class="i">v</span>, <span class="i">x</span>);
     <span class="k">return</span> <span class="n">0</span>;
 } 
 
</pre><br><br>
<b>Output:</b><br>bsf&#40;x21&#41; = 0<br>
  bsr&#40;x21&#41; = 5<br><br></dd>
<dt><big>int <a href="./htmlsrc/std.intrinsic.html#L68" title="At line 68.">bt</a>(in uint * <i>p</i>, uint <i>bitnum</i>);</big></dt>
<dd>
Tests the bit.
 <br><br></dd>
<dt><big>int <a href="./htmlsrc/std.intrinsic.html#L73" title="At line 73.">btc</a>(uint * <i>p</i>, uint <i>bitnum</i>);</big></dt>
<dd>
Tests and complements the bit.
 <br><br></dd>
<dt><big>int <a href="./htmlsrc/std.intrinsic.html#L78" title="At line 78.">btr</a>(uint * <i>p</i>, uint <i>bitnum</i>);</big></dt>
<dd>
Tests and resets &#40;sets to 0&#41; the bit.
 <br><br></dd>
<dt><big>int <a href="./htmlsrc/std.intrinsic.html#L137" title="At line 137.">bts</a>(uint * <i>p</i>, uint <i>bitnum</i>);</big></dt>
<dd>
Tests and sets the bit.
 <br><br>
<b>Params:</b><br>
<table>
<tr><td><i>p</i></td><td>a non-NULL pointer to an array of uints.</td></tr>
<tr><td><i>index</i></td><td>a bit number, starting with bit 0 of p[0],
 and progressing. It addresses bits like the expression:
---
p[index / (uint.sizeof*8)] & (1 << (index & ((uint.sizeof*8) - 1)))
---</td></tr></table><br>
<b>Returns:</b><br>
A non-zero value if the bit was set, and a zero
	if it was clear.<br><br>
<b>Example:</b><br><pre class="d_code">

<span class="k">import</span> <span class="i">std</span>.<span class="i">stdio</span>;
<span class="k">import</span> <span class="i">std</span>.<span class="i">intrinsic</span>;

<span class="k">int</span> <span class="i">main</span>()
{   
    <span class="k">uint</span> <span class="i">array</span>[<span class="n">2</span>];

    <span class="i">array</span>[<span class="n">0</span>] = <span class="n">2</span>;
    <span class="i">array</span>[<span class="n">1</span>] = <span class="n">0x100</span>;

    <span class="i">writefln</span>(<span class="sl">"btc(array, 35) = %d"</span>, &lt;<span class="i">b</span>&gt;<span class="i">btc</span>&lt;/<span class="i">b</span>&gt;(<span class="i">array</span>, <span class="n">35</span>));
    <span class="i">writefln</span>(<span class="sl">"array = [0]:x%x, [1]:x%x"</span>, <span class="i">array</span>[<span class="n">0</span>], <span class="i">array</span>[<span class="n">1</span>]);

    <span class="i">writefln</span>(<span class="sl">"btc(array, 35) = %d"</span>, &lt;<span class="i">b</span>&gt;<span class="i">btc</span>&lt;/<span class="i">b</span>&gt;(<span class="i">array</span>, <span class="n">35</span>));
    <span class="i">writefln</span>(<span class="sl">"array = [0]:x%x, [1]:x%x"</span>, <span class="i">array</span>[<span class="n">0</span>], <span class="i">array</span>[<span class="n">1</span>]);

    <span class="i">writefln</span>(<span class="sl">"bts(array, 35) = %d"</span>, &lt;<span class="i">b</span>&gt;<span class="i">bts</span>&lt;/<span class="i">b</span>&gt;(<span class="i">array</span>, <span class="n">35</span>));
    <span class="i">writefln</span>(<span class="sl">"array = [0]:x%x, [1]:x%x"</span>, <span class="i">array</span>[<span class="n">0</span>], <span class="i">array</span>[<span class="n">1</span>]);

    <span class="i">writefln</span>(<span class="sl">"btr(array, 35) = %d"</span>, &lt;<span class="i">b</span>&gt;<span class="i">btr</span>&lt;/<span class="i">b</span>&gt;(<span class="i">array</span>, <span class="n">35</span>));
    <span class="i">writefln</span>(<span class="sl">"array = [0]:x%x, [1]:x%x"</span>, <span class="i">array</span>[<span class="n">0</span>], <span class="i">array</span>[<span class="n">1</span>]);

    <span class="i">writefln</span>(<span class="sl">"bt(array, 1) = %d"</span>, &lt;<span class="i">b</span>&gt;<span class="i">bt</span>&lt;/<span class="i">b</span>&gt;(<span class="i">array</span>, <span class="n">1</span>));
    <span class="i">writefln</span>(<span class="sl">"array = [0]:x%x, [1]:x%x"</span>, <span class="i">array</span>[<span class="n">0</span>], <span class="i">array</span>[<span class="n">1</span>]);

    <span class="k">return</span> <span class="n">0</span>;
} 
 
</pre><br><br>
<b>Output:</b><br><pre>
btc&#40;array, 35&#41; = 0
array = [0]:x2, [1]:x108
btc&#40;array, 35&#41; = -1
array = [0]:x2, [1]:x100
bts&#40;array, 35&#41; = 0
array = [0]:x2, [1]:x108
btr&#40;array, 35&#41; = -1
array = [0]:x2, [1]:x100
bt&#40;array, 1&#41; = -1
array = [0]:x2, [1]:x100
</pre><br><br></dd>
<dt><big>uint <a href="./htmlsrc/std.intrinsic.html#L145" title="At line 145.">bswap</a>(uint <i>v</i>);</big></dt>
<dd>
Swaps bytes in a 4 byte uint end-to-end, i.e. byte 0 becomes
	byte 3, byte 1 becomes byte 2, byte 2 becomes byte 1, byte 3
	becomes byte 0.
 <br><br></dd>
<dt><big>ubyte <a href="./htmlsrc/std.intrinsic.html#L151" title="At line 151.">inp</a>(uint <i>port_address</i>);</big></dt>
<dt><big>ushort <a href="./htmlsrc/std.intrinsic.html#L156" title="At line 156.">inpw</a>(uint <i>port_address</i>);</big></dt>
<dt><big>uint <a href="./htmlsrc/std.intrinsic.html#L161" title="At line 161.">inpl</a>(uint <i>port_address</i>);</big></dt>
<dd>
Reads I/O port at port_address.
 <br><br></dd>
<dt><big>ubyte <a href="./htmlsrc/std.intrinsic.html#L167" title="At line 167.">outp</a>(uint <i>port_address</i>, ubyte <i>value</i>);</big></dt>
<dt><big>ushort <a href="./htmlsrc/std.intrinsic.html#L172" title="At line 172.">outpw</a>(uint <i>port_address</i>, ushort <i>value</i>);</big></dt>
<dt><big>uint <a href="./htmlsrc/std.intrinsic.html#L177" title="At line 177.">outpl</a>(uint <i>port_address</i>, uint <i>value</i>);</big></dt>
<dd>
Writes and returns value to I/O port at port_address.
 <br><br></dd></dl>
    <br><br>
<br><br>
<!-- Google ad -->
<script type="text/javascript"><!--
/**/google_ad_client = "pub-5628673096434613";
/**/google_ad_width = 728;
/**/google_ad_height = 90;
/**/google_ad_format = "728x90_as";
/**/google_ad_channel ="6203743411";
/**/google_page_url = document.location;
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</div>


<div id="copyright">
Public Domain |
Page generated by <a href="http://code.google.com/p/dil">dil</a> on Wed Oct  1 23:47:52 2008
</div>

</body>
</html>